package com.yesido.javabase.leetcode.easy;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yesido
 * @description
 * @date 2023-07-04 1:54
 * @Version 8.3
 * nums = [2,7,11,15], target = 9
 * 输出：[0,1]
 * 解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。
 * <p>
 * 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
 * <p>
 * 你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
 * <p>
 * 你可以按任意顺序返回答案。
 */
public class LD1 {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        Map<Integer, Integer> mp = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (mp.containsKey(target - nums[i])) {
                res[0] = mp.get(target - nums[i]);
                res[1] = i;
            } else {
                mp.put(nums[i], i);
            }
        }
        return res;
    }
    //9


    /**
     * @param x
     * @return boolean
     * @date 2023-07-04 2:29
     */

    public static boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(x);

        if (sb.toString().equals(sb.reverse().toString())) {
            return true;
        }
        return false;
    }


    /**
     * @param nums
     * @return int
     * 输入：nums = [0,0,1,1,1,2,2,3,3,4]
     * 输出：5, nums = [0,1,2,3,4]
     * 解释：函数应该返回新的长度 5 ，
     * 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
     * @date 2023-07-04 2:32
     */

    public static int removeDuplicates(int[] nums) {
        if (nums.length == 1) {
            return 1;
        }
        int left = 1;
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] != nums[i + 1]) {
                nums[left++] = nums[i + 1];
            }
        }
        return left;
    }

    public int removeDuplicates1(int[] nums) {
        int k = 0;
        for (int num : nums) {
            if (num > nums[k]) {
                nums[++k] = num;
            }
        }
        return k + 1;
    }

    /**
     * @param nums
     * @param target
     * @return int
     * 35题
     * 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
     * <p>
     * 请必须使用时间复杂度为 O(log n) 的算法。
     * for循环是o(n) 二分查找为O(logn)
     * @date 2023-07-04 2:55
     */
    public int searchInsert(int[] nums, int target) {
        int length = nums.length;
        //排序数组
        if (nums[nums.length - 1] < target) {
            // 放到最后
            return length;
        }
        int left = 0, right = length - 1;
        while (left < right) {
            int mid = (right - left) / 2 + left;
            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;

    }

    /**
     * @param s
     * @return int
     * <p>
     * 58 考察字符串的多个空格匹配
     * @date 2023-07-04 3:00
     */

    public int lengthOfLastWord(String s) {
        String[] split = s.split("\\s+");
        return split[split.length - 1].length();


    }

    /**
     * @param digits
     * @return int[]
     * 66
     * @date 2023-07-04 3:05
     */
    public static int[] plusOne(int[] digits) {
       int len = digits.length;
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i]!=9){
                digits[i]+=1;
                break;
            }else {
                digits[i]=0;
                if (i==0){
                    digits=new int[len+1];
                    digits[0] = 1;
                }
            }
        }
        return digits;
    }

    /**
     * @date 2023-07-04 11:57
     * @param s
     * @param t
     * @return char
     * 389
     */

    public char findTheDifference(String s, String t) {
        int len = t.length();
        int[] arr = new int[26];
        for (int i = 0; i < len; i++) {
            arr[t.charAt(i)-'a'] +=1;
        }
        for (int i = 0; i < s.length(); i++) {
            arr[s.charAt(i)-'a'] -=1;
        }
        // 统计arr数组种非0的位置
        char c = 'a';
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]>0){
               int temp = 'a'+i;
               c = (char)temp;
            }
        }

        return c;



    }



    public static void main(String[] args) {
//        boolean palindrome = isPalindrome(10);
//        System.out.println(Math.ceil(-0.5));// 向上取整
//        System.out.println(Math.floor(-0.5));// 向下取整

//        int[] ints = plusOne(new int[]{9});
//        System.out.println(Arrays.toString(ints));

        System.out.println('a'+25);
        System.out.println((char) ('a'+25));

    }
}
